package com.zha;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Table;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;

public class HbaseClientDemo{
    Connection conn = null;
    Table table = null;

    @Before
    public void getConn() throws IOException {
        //构建一个连接对象
        Configuration conf = HBaseConfiguration.create();  //会自动加载hbase-site.xml
        conf.set("hbase.zookeeper.quorum", "hbase:2181,hbase-01:2181,hbase-02:2181");
        conn = ConnectionFactory.createConnection(conf);
        table = conn.getTable(TableName.valueOf("t_user1"));
    }

    /**
     * SQL语言共分为四大类：数据查询语言DQL，数据操纵语言DML，数据定义语言DDL，数据控制语言DCL
     * 1) DQL基本结构是由SELECT子句，FROM子句，WHERE子句组成的查询块
     * 2) DML主要有三种形式：插入：INSERT  更新：UPDATE  删除：DELETE
     * 3) DDL用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等
     * 4) 数据控制语言DCL用来授予或回收访问数据库的某种特权，并控制数据库操纵事务发生的时间及效果，对数据库实行监视等。
     * <p>
     * <p>
     * DDL
     *
     * @throws IOException
     */
    @Test
    public void teatCreateTable() throws IOException {
        //从连接中构造一个DDL操作器
        Admin admin = conn.getAdmin();
        //创建一个表定义描述对象
        HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf("t_user1"));
        //创建列族定义描述对象
        HColumnDescriptor hColumnDescriptor_1 = new HColumnDescriptor("base_info");
        HColumnDescriptor hColumnDescriptor_2 = new HColumnDescriptor("extra_info");
        //设置该列族中存储数据的最大版本数，默认是1
        hColumnDescriptor_1.setMaxVersions(3);

        //将列族定义信息对象放入表定义对象中
        hTableDescriptor.addFamily(hColumnDescriptor_1);
        hTableDescriptor.addFamily(hColumnDescriptor_2);

        //用DDL操作器对象：admin来建表
        admin.createTable(hTableDescriptor);

        //关闭连接
        admin.close();
        conn.close();

    }
}